﻿'*******************************************************************************************
'* Copyright Brügmann Software GmbH, Papenburg
'* Author: Björn Kremer
'* Contact: codeplex<at>patorg.de
'* 
'* VB.CMIS is a VB.NET implementation of the Content Management Interoperability Services (CMIS) standard
'*
'* This file is part of VB.CMIS.
'* 
'* VB.CMIS is free software: you can redistribute it and/or modify
'* it under the terms of the GNU Lesser General Public License as published by
'* the Free Software Foundation, either version 3 of the License, or
'* (at your option) any later version.
'* 
'* VB.CMIS is distributed in the hope that it will be useful,
'* but WITHOUT ANY WARRANTY; without even the implied warranty of
'* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
'* GNU Lesser General Public License for more details.
'* 
'* You should have received a copy of the GNU Lesser General Public License
'* along with VB.CMIS. If not, see <http://www.gnu.org/licenses/>.
'*******************************************************************************************
Imports System
Imports System.Runtime.Serialization
Imports System.Xml.Serialization
Imports System.Xml

Namespace CMISObjects
   <XmlRoot("changeEventInfo", Namespace:=CmisNamespaceConstants.Cmis)>
   Public Class CmisChangeEvent
      Implements IXmlSerializable

      Public Property ChangeType() As TypeOfChangesEnum

      Public Enum TypeOfChangesEnum
         <EnumMember(Value:="created")> _
         Created

         <EnumMember(Value:="updated")> _
         Updated

         <EnumMember(Value:="deleted")> _
         Deleted

         <EnumMember(Value:="security")> _
         Security
      End Enum

      Public Property ChangeTime() As DateTimeOffset

      Public Function GetSchema() As System.Xml.Schema.XmlSchema Implements System.Xml.Serialization.IXmlSerializable.GetSchema
         Return Nothing
      End Function

      Public Sub ReadXml(reader As System.Xml.XmlReader) Implements System.Xml.Serialization.IXmlSerializable.ReadXml

         Dim doc As New XmlDocument()
         doc.Load(reader)
        
         Dim node As XmlNode = Common.GetItemCaseInsensitiveFromXML(doc, "changeeventinfo")
         For Each child As XmlNode In node.ChildNodes
            Dim lName As String = Common.GetNodeNameWithoutPrefix(child).ToLowerInvariant
            If lName.Equals("changetype") Then
               ChangeType = Common.GetValueByDataMemberValue(Of TypeOfChangesEnum)(child.InnerText)
            ElseIf lName.Equals("changetime") Then
               ChangeTime = Xml.XmlConvert.ToDateTimeOffset(child.InnerText)
            End If
         Next

      End Sub

      Public Sub WriteXml(writer As System.Xml.XmlWriter) Implements System.Xml.Serialization.IXmlSerializable.WriteXml
         writer.WriteElementString("changeType", CmisNamespaceConstants.Cmis, Common.GetDataMemberValueFromEnum(Me.ChangeType, GetType(TypeOfChangesEnum)))
         writer.WriteElementString("changeTime", CmisNamespaceConstants.Cmis, Xml.XmlConvert.ToString(ChangeTime))
      End Sub
   End Class
End Namespace